#ifndef COM_RS485_H
#define COM_RS485_H

#include <QtSerialPort/QSerialPort>
#include <QObject>
#include <QThread>
#include <QDebug>

class Rs485Com : public QThread
{
	Q_OBJECT
public:
	explicit Rs485Com(QObject* parent = nullptr);
	/// 串口通讯报文
	QByteArray readSpeed[4];
	// QThread interface
public slots:
	/// 串口通讯初始化
	/// 与对应串口建立连接，设置通讯波特率、读写方向、数据位等
	/// @param  portName    串口名，如 COM1、COM2 等
	void initPort(const QString& portName);
	/// 运行通信（同步）
	/// 与 485 设备不断进行同步通讯
	void run(void);

	void send_order(unsigned char* hex, int len);

	void send_order(QByteArray);




private:
public:
	/// 用于通讯的串口类成员
	QSerialPort* port;
	/// 串口通讯子线程成员
	//SubThread* subThread;
signals:
	/// 接收数据发送给主线程的信号函数
	/// @param  addr    设备地址
	/// @param  dis 读取和处理后得到的数据
	void result(int addr, double dis);
	/// 建立连接失败信号函数
	void failed(void);
	/// 建立连接成功信号函数
	void succeed(void);
};


class SubThread : public QThread
{
	Q_OBJECT

public:
	SubThread();
	/// 用于通讯的串口类成员
	Rs485Com* com485;

	/// 串口通讯报文
	QByteArray readSpeed[4];
	// QThread interface

signals:

	/// 接收数据发送给主线程的信号函数
	/// @param  addr    设备地址
	/// @param  dis 读取和处理后得到的数据
	void result(int addr, double dis);
protected:
	void run();
};
#endif // COM_RS485_H
